package com.xiejr.controller;

import com.xiejr.api.dto.order.OrderStatusDTO;
import com.xiejr.converter.OrderStatusConverter;
import com.xiejr.entity.OrderStatus;
import com.xiejr.service.OrderStatusService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 订单状态表;订单的每个状态更改都需要进行记录
 * 10：待付款  20：已付款，待发货  30：已发货，待收货（7天自动确认）  40：交易成功（此时可以评价）50：交易关闭（待付款时，用户取消 或 长时间未付款，系统识别后自动关闭）
 * 退货/退货，此分支流程不做，所以不加入(OrderStatus)表控制层
 *
 * @author mobai
 * @since 2021-02-14 21:23:52
 */
@RestController
@RequestMapping("orderStatus")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
@Slf4j
@Api(value = "订单状态表;订单的每个状态更改都需要进行记录 10：待付款 20：已付款，待发货 30：已发货，待收货（7天自动确认）  40：交易成功（此时可以评价）50：交易关闭（待付款时，用户取消 或 长时间未付款，系统识别后自动关闭） 退货/退货，此分支流程不做，所以不加入 控制器", tags = {" 订单状态表;订单的每个状态更改都需要进行记录 10：待付款 20：已付款，待发货 30：已发货，待收货（7天自动确认）  40：交易成功（此时可以评价）50：交易关闭（待付款时，用户取消 或 长时间未付款，系统识别后自动关闭） 退货/退货，此分支流程不做，所以不加入 接口"})
public class OrderStatusController {
    /**
     * 订单状态表;订单的每个状态更改都需要进行记录
     * 10：待付款  20：已付款，待发货  30：已发货，待收货（7天自动确认）  40：交易成功（此时可以评价）50：交易关闭（待付款时，用户取消 或 长时间未付款，系统识别后自动关闭）
     * 退货/退货，此分支流程不做，所以不加入 服务对象
     */
    private final OrderStatusService orderStatusService;


    /**
     * 订单状态表;订单的每个状态更改都需要进行记录
     * 10：待付款  20：已付款，待发货  30：已发货，待收货（7天自动确认）  40：交易成功（此时可以评价）50：交易关闭（待付款时，用户取消 或 长时间未付款，系统识别后自动关闭）
     * 退货/退货，此分支流程不做，所以不加入 领域对象转换器
     */
    private final OrderStatusConverter orderStatusConvertor;


    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("/{id}")
    @ApiOperation("根据ID获取单条数据")
    public OrderStatus selectOne(@PathVariable String id) {
        return this.orderStatusService.getById(id);
    }


    /**
     * 获取所有
     *
     * @return 所有数据
     */
    @ApiOperation("获取所有")
    @GetMapping("/all")
    public List<OrderStatus> all() {
        return this.orderStatusService.list();
    }


    /**
     * 插入单条数据
     *
     * @param param 待插入数据
     * @return void
     */
    @ApiOperation("插入数据")
    @PostMapping("")
    public void insert(@RequestBody @Valid OrderStatusDTO param) {
        OrderStatus entity = this.orderStatusConvertor.dtoToEntity(param);
        this.orderStatusService.save(entity);
    }


    /**
     * 根据id删除数据
     *
     * @param id 主键
     * @return void
     */
    @ApiOperation("根据ID删除数据")
    @DeleteMapping("/{id}")
    public void deleteById(@PathVariable String id) {
        this.orderStatusService.removeById(id);
    }


}